package com.fjnu.service;

import com.fjnu.dto.ArticleConditionDto;
import com.fjnu.dto.ArticleUpdateDto;
import com.fjnu.entity.Article;
import com.fjnu.utils.PageResult;

/**
 * 文章服务接口
 */
public interface ArticleService {
    
    /**
     * 根据文章的条件进行分页查询
     * @param articleCond 文章查询条件
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    PageResult queryByArticleCondition(ArticleConditionDto articleCond, Integer pageNum, Integer pageSize);
    
    /**
     * 根据文章 id 查询文章详情
     * @param articleId 文章ID
     * @return 文章对象
     */
    Article queryById(String articleId);
    
    /**
     * 新增文章
     * @param article 文章对象
     * @return 返回带有新增 id 的 Article 对象
     */
    Article insertArticle(Article article);
    
    /**
     * 将新增文章发布，发布逻辑为更新对应文章的状态（由默认的 0 改为 1），同时更新用户对应的活动积分
     * @param articleId 文章ID
     * @param userId 用户ID
     * @return 1 表示发布成功，0 表示发布失败
     */
    int publishArticle(String articleId, String userId);
    
    /**
     * 批量发布文章，同时更新用户对应的活动积分
     * @param articleIds 文章ID数组
     * @param userId 用户ID
     * @return 1 表示成功，0 表示失败
     */
    int publishArticlesByBatch(String[] articleIds, String userId);
    
    /**
     * 根据 articleUpdateDto 对象的信息更新文章
     * @param articleUpdateDto 文章更新对象
     * @return 1 表示成功，0 表示失败
     */
    int updateArticle(ArticleUpdateDto articleUpdateDto);
    
    /**
     * 根据 articleId 删除对应文章，同时更新该用户对应的活动积分
     * @param articleId 文章ID
     * @param userId 用户ID
     * @return 1 表示成功，0 表示失败
     */
    int removeArticle(String articleId, String userId);
}